package enumTest;

/**
 * (1)使用 enum 定义的枚举类默认继承了 java.lang.Enum类，因此不能再继承其他类；
 * (2)使用 enum 定义的枚举类默认使用final进行修饰，不可以被继承；(也从侧面说明了它是一个常量类)
 * (3)枚举类的构造器只能使用 private 权限修饰符；
 * (4)枚举类的所有实例必须在枚举类中显式列出，多个对象之间使用",“隔开，末尾使用”;"结束。
 * 列出的实例系统会自动添加 public static final 进行修饰；
 * (5)必须在枚举类的第一行声明枚举类对象；
 * (6)若枚举类只有一个枚举对象, 则可以作为一种单例模式的实现方式。
 * @description:枚举测试
 * @author: guoc
 * @createDate: 2020/7/20 17:11
 */
public enum Season2 implements Show {

    SPRING("春天","鸟语花香"){
        @Override
        public void show() {
            System.out.println("春天是一个鸟语花香的季节！");
        }
    },
    SUMMER("夏天","夏日炎炎") {
        @Override
        public void show() {
            System.out.println("夏天是一个夏日炎炎的季节！");
        }
    },
    AUTUMN("秋天","秋高气爽") {
        @Override
        public void show() {
            System.out.println("秋天是一个秋高气爽的季节！");
        }
    },
    WINNER("冬天","寒风瑟瑟") {
        @Override
        public void show() {
            System.out.println("冬天是一个寒风瑟瑟的季节！");
        }
    };

    //声明Season对象的属性，又因为枚举类对象的属性不应允许被改动, 所以应该使用 private final修饰
    private final String seasonName;
    private final String seasonDesc;

    //枚举类的构造器只能使用 private 权限修饰符
    //私有化构造器是为了保证不能在类的外部创建其对象，否则就不能确定对象的个数
    private  Season2(String seasonName, String seasonDesc) {
        this.seasonName=seasonName;
        this.seasonDesc=seasonDesc;
    }

    //获取枚举类对象的属性
    //只需要提供属性的get方法即可，但是不能提供set方法，而且也不允许提供set方法，因为枚举类是不可变的常量类，不能被修改
    public String getSeasonName() {
        return seasonName;
    }

    public String getSeasonDesc() {
        return seasonDesc;
    }

}
